import cn.gov.sdcj.accountancy.rule.RuleManager

import static java.util.Calendar.MONTH
import static java.util.Calendar.YEAR

/**
 * <p>Description: 生成会计凭证的规则
 * </p>
 *
 * Created by laijie on 2015/3/9.
 */

/**
 * 是否是直接支付
 * @param zfpzVO
 * @return
 */
def isDirect(def zfpzVO) {
    return '0' == zfpzVO.voucher_type
}

/**
 * 是否是预算内
 * @param zfpzVO
 */
def isInside(def zfpzVO) {
    return '0' == zfpzVO.org_type
}

/**
 * 定义模板，支持中英文（中文时请使用UTF-8编码）
 *
 * 支付中心预算内正常对碰模板
 */
def tmpCenterPayIn = { detail, vo -> // 上下文参数，支付凭证VO对象，由应用模版时通过上下文方式传入。
    // 第1张凭证
    凭证 {
        凭证字 '记'
        业务日期 vo.fdate
        年 vo.fdate[YEAR]
        期间 vo.fdate[MONTH] + 1
        借 {
            def bdgtType2AcctNum = ['2': '501', '4': '505']
            def bdgtType2AcctName = ['2': '一般预算支出', '4': '基金预算支出']
            def voucherType2AcctNum = ['0': '01', '1': '02', '2': '02']
            def voucherType2AcctName = ['0': '直接', '1': '授权', '2': '授权']
            def src2AcctNum = ['000': '11', '100': '12', '200': '13', '064': '14', '051': '21', '151': '22', '251': '23']

            摘要 detail.purpose
            科目编码 "${bdgtType2AcctNum[detail.bdgt_id_type]}.${detail.bdgt_id[0..2]}.${detail.bdgt_id[3..4]}.${detail.bdgt_id[5..6]}" +
                    ".${voucherType2AcctNum[detail.voucher_type]}.${src2AcctNum[detail.src_id]}"
            科目名称 "${bdgtType2AcctName[detail.bdgt_id_type]}--${detail.bdgt_name}" +
                    "--${voucherType2AcctName[detail.voucher_type]}--${detail.src_name}"
            金额 detail.amt
            单位 {
                核算编码 detail.unit_id
                核算名称 detail.unit_name
            }
            项目 {
                核算编码 detail.prj_id
                核算名称 detail.prjname
            }
            关联记录 {
                // 记录凭证明细由那条支付凭证生成
                表名 'GK_SQZFPZ'
                标识号 detail.gk_zfpz_id
            }
        }
        贷 {
            科目编码 isDirect(detail) ? '103' : '213.002'
            科目名称 isDirect(detail) ? '财政零余额账户存款' : '已结报支出--财政授权支付'
            金额 detail.amt
        }
        制单人 vo.fpreparer
        附件数 vo.fattachment
    }

    // 第2张凭证
    if (isDirect(detail)) {
        // 直接支付时才有第2张凭证
        凭证 {
            凭证字 '记'
            业务日期 vo.fdate
            年 vo.fdate[YEAR]
            期间 vo.fdate[MONTH] + 1
            借 {
                摘要 '零余额账户清算'
                科目编码 '103'
                科目名称 '财政零余额账户存款'
                金额 detail.amt
            }
            贷 {
                科目编码 '213.002'
                科目名称 '已结报支出--财政直接支付'
                金额 detail.amt
            }
            制单人 vo.fpreparer
        }
    }
}

// 注册模板
RuleManager.reg("支付中心预算内正常对碰", tmpCenterPayIn)
